package com.cs.beneficios.business.entity;

import com.cs.beneficios.business.model.CondicionConsultaVO;
import com.cs.beneficios.business.model.RepAtributoVO;
import com.cs.beneficios.business.model.RepDetBOTVO;
//import com.cs.beneficios.business.model.RepDetBeneficiarioVO;
import com.cs.beneficios.business.model.ReporteDetVO;
import com.cs.beneficios.common.ConnectionFactory;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;

//import java.sql.Types;

import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
//import java.util.Vector;

import oracle.jdbc.OracleTypes;


public class RepDetBOTDAO 
{
  /**
   * Conexion a la base de datos.
   */
  private Connection conn = null;
  private Connection conn1 = null;
  private ConnectionFactory cf;
  private boolean checkFiltersEsp = false;
  private boolean checkFiltersGen = false;
  
  /**
   * Constructor que inicializa la conexion con la base de datos.
   * @param conn Conexion con la base de datos.
   */
  
  public RepDetBOTDAO(ConnectionFactory cf)
  {
	this.cf = cf;
  }
  
  public Object clone()
  {
  Object clone = null;
  try
  {
  clone = super.clone();
  }
  catch(CloneNotSupportedException e)
  {
  // No deberia suceder
  }
  return clone;
  }
  
	/*public int getCantidadBeneOtorg (RepDetBOTVO criterea) throws SQLException
	  {
		int cantidad = 0;
		try
		{
		  conn = cf.getConnection();
		  String query = "SELECT COUNT(1) FROM (SELECT prog.nombre programa, sub.codigo codSubprograma, "+
						 "       sub.nombre subprograma, sede.codigo codSede, "+
						 "       sede.nombre sede, bot1.codigo codBot, bot1.ben_codigo codBen,  "+
						 "       to_char(bot1.FECHA_BENEFICIO ,'dd/mm/RRRR') fecha "+
						 "FROM tcs_ben_beneficio_otorgado bot1, "+
						 "        tcs_ben_subprograma sub, "+
						 "        tcs_ben_programa prog, "+
						 "        tcs_ben_sede sede "+
						 "WHERE   sub.codigo = bot1.sbpr_codigo "+
						 "         AND prog.codigo = sub.prg_codigo "+
						 "         AND sede.codigo = bot1.sede_codigo "+
						 "         AND bot1.FECHA_BENEFICIO <= sysdate" ;
          
		  if((Object)criterea.getCodeSede() != null)
		  {
			query += " AND sede.CODIGO = "+criterea.getCodeSede();
		  }
		  if((Object)criterea.getCodeSubprograma() != null)
		  {
			query += " AND sub.CODIGO = "+criterea.getCodeSubprograma();
		  }
		  if((Object)criterea.getDesde() != null && (Object)criterea.getHasta() != null)
		  {
			query += " AND bot1.FECHA_BENEFICIO between to_date('"+criterea.getDesde()+"','dd/mm/rrrr') and to_date('"+criterea.getHasta()+"','dd/mm/rrrr')";
		  }
          
		  query += " ORDER BY prog.NOMBRE,sub.NOMBRE,sede.NOMBRE) ";
          
		  ResultSet rst = cf.getRecordsRset(query,null,conn);
          
		  rst.next();
          
		  cantidad = rst.getInt(1);
          
		  rst.close();
		  cf.closeConnection(conn);
		}catch(SQLException e)
		{
		  e.printStackTrace();
		}
		return cantidad;
	  }*/
  
  /*public List getListaRepoteBeneOtorg (RepDetBOTVO criterea) throws SQLException
  {
	List lListaBeneOtorg = new LinkedList();
	try
	{
	  conn = cf.getConnection();
	  String query = "SELECT prog.nombre programa, sub.codigo codSubprograma, "+
					 "       sub.nombre subprograma, sede.codigo codSede, "+
					 "       sede.nombre sede, bot1.codigo codBot, bot1.ben_codigo codBen,  "+
					 "       to_char(bot1.FECHA_BENEFICIO ,'dd/mm/RRRR') fecha "+
					 "FROM tcs_ben_beneficio_otorgado bot1, "+
					 "        tcs_ben_subprograma sub, "+
					 "        tcs_ben_programa prog, "+
					 "        tcs_ben_sede sede "+
					 "WHERE   sub.codigo = bot1.sbpr_codigo "+
					 "         AND prog.codigo = sub.prg_codigo "+
					 "         AND sede.codigo = bot1.sede_codigo "+
					 "         AND bot1.FECHA_BENEFICIO <= sysdate" ;
      
	  if((Object)criterea.getCodeSede() != null)
	  {
		query += " AND sede.CODIGO = "+criterea.getCodeSede();
	  }
	  if((Object)criterea.getCodeSubprograma() != null)
	  {
		query += " AND sub.CODIGO = "+criterea.getCodeSubprograma();
	  }
	  if((Object)criterea.getDesde() != null && (Object)criterea.getHasta() != null)
	  {
		query += " AND bot1.FECHA_BENEFICIO between to_date('"+criterea.getDesde()+"','dd/mm/rrrr') and to_date('"+criterea.getHasta()+"','dd/mm/rrrr')";
	  }
	  RepDetBeneficiarioVO objBeneficioOtorg = null;
	  ResultSet rst = cf.getRecordsRset(query,null,conn);
      
	  while(rst.next())
	  {
		  objBeneficioOtorg = new RepDetBeneficiarioVO();
          
		  objBeneficioOtorg.setNombrePrograma(rst.getString("programa"));
		  objBeneficioOtorg.setCodeSubprograma(new Long(rst.getLong("codSubprograma")));
		  objBeneficioOtorg.setNombreSubprograma(rst.getString("subprograma"));
		  objBeneficioOtorg.setNombreSede(rst.getString("sede"));
		  objBeneficioOtorg.setFechabeneotorgado(rst.getString("fecha"));
		  objBeneficioOtorg.setCodebenotorgado(new Long(rst.getLong("codBot")));
		  objBeneficioOtorg.setCodebeneficiario(new Long(rst.getString("codBen")));
		  objBeneficioOtorg.setCodeSede(new Long(rst.getLong("codSede")));          
          
		  lListaBeneOtorg.add(objBeneficioOtorg);
		  objBeneficioOtorg = null;
          
	  }
	  rst.close();
	  cf.closeConnection(conn);
	}catch(SQLException e)
	{
	  e.printStackTrace();
	}
	return lListaBeneOtorg;
  }*/
  
public Collection getReporte(List atributosGenericos, List atributosEspecificos, 
						 List filtros, ConnectionFactory cf, RepDetBOTVO criterea) throws SQLException
   {
	 Collection beneficiarios = new LinkedList();
	 List latributosEspecificos = atributosEspecificos;
	 List latributosGenericos = atributosGenericos;
     
	 RepAtributoVO atrVO = null;
     
	 cf.closeConnection(conn);
     
	 String atriGenerales = null;
	 String atriEspecificos = null;
	 String codiEspecificos = null;
	 String filtrosGenerales = "'"+checkFiltros((Collection)filtros)+"'";
	 String filtrosEspecificos = null;
	 if(criterea.getCodigoAtrGestor() != null && criterea.getGestor() != null){
		 filtrosEspecificos = "'"+checkFiltrosEspecificos((Collection)filtros)+
							  " AND NVL(Fcs_Ben_Valor_Atributo("+criterea.getCodigoAtrGestor()+", " +
							  " bot.codigo, ben.codigo, bot.FECHA_BENEFICIO),'' '') = TO_CHAR(''"+criterea.getGestor()+"'')'";
	 } else {
		 filtrosEspecificos = "'"+checkFiltrosEspecificos((Collection)filtros)+"'";
	 }
     
	 int tamanolatriEsp = latributosEspecificos.size();
	 String Desde = criterea.getDesde();
	 String Hasta = criterea.getHasta();
     
	 if(Desde != null){
		 Desde = "'"+Desde+"'";
	 }
	 if(Hasta != null){
		 Hasta = "'"+Hasta+"'";
	 }

	 if(latributosGenericos.size() > 0){
		 atriGenerales = "";
         
		 for(int i = 0; i < latributosGenericos.size(); i++){
			 atrVO = (RepAtributoVO)latributosGenericos.get(i);
             
			 atriGenerales +=  atrVO.getNombre()+"|";           
		 }
         
		 atriGenerales = "'"+atriGenerales+"'";
	 }    
     
	 if(tamanolatriEsp > 0){
		 codiEspecificos = "";
		 atriEspecificos = "";
         
		 for(int i=0; i < tamanolatriEsp; i++) {
			 atrVO = (RepAtributoVO)latributosEspecificos.get(i);
             
			 codiEspecificos += atrVO.getCodigo()+"|";
			 atriEspecificos += " CAMPO"+(i+1)+" ";
		 }

		 codiEspecificos = "'"+codiEspecificos+"'";
	 }
           
	 conn = cf.getConnection();
     
	 String strSql = "{call beneficios.PCS_REPORTE_BENEFICIO_OTORGADO("+atriGenerales+", "+tamanolatriEsp+", "+codiEspecificos+"," +
				 ""+filtrosGenerales+","+filtrosEspecificos+", "+criterea.getCodeSede()+", "+criterea.getCodeSubprograma()+", " +
				 Desde+", "+Hasta+", ?)}";
     
	 CallableStatement stmt = conn.prepareCall(strSql);
	 stmt.registerOutParameter(1, OracleTypes.CURSOR);
	 stmt.execute();
     
	 ResultSet rst = (ResultSet)stmt.getObject(1);
	 ReporteDetVO reporteDetVO = null;
     
	 while(rst.next()){
		 reporteDetVO = new ReporteDetVO();
		 if(atriGenerales != null){
			 if(atriGenerales.indexOf("TIPO_DOCUMENTO") != -1){
				 reporteDetVO.setTipoDocumento(rst.getString("TIPO_DOCUMENTO"));
			 }
			 if(atriGenerales.indexOf("NUMERO_DOCUMENTO") != -1){
				 reporteDetVO.setNumeroDocumento(rst.getString("NUMERO_DOCUMENTO"));
			 }
			 if(atriGenerales.indexOf("PRIMER_NOMBRE") != -1){
				 reporteDetVO.setPrimerNombre(rst.getString("PRIMER_NOMBRE"));
			 }
			 if(atriGenerales.indexOf("SEGUNDO_NOMBRE") != -1){
				 reporteDetVO.setSegundoNombre(rst.getString("SEGUNDO_NOMBRE"));
			 }
			 if(atriGenerales.indexOf("PRIMER_APELLIDO") != -1){
				 reporteDetVO.setPrimerApellido(rst.getString("PRIMER_APELLIDO"));
			 }
			 if(atriGenerales.indexOf("SEGUNDO_APELLIDO") != -1){
				 reporteDetVO.setSegundoApellido(rst.getString("SEGUNDO_APELLIDO"));
			 }
			 if(atriGenerales.indexOf("DIRECCION_DESCRIPTIVA") != -1){
				 reporteDetVO.setDirDescriptiva(rst.getString("DIRECCION_DESCRIPTIVA"));
			 }
			 if(atriGenerales.indexOf("DIRECCION_ENCASILLADA") != -1){
				 reporteDetVO.setDirEncasillada(rst.getString("DIRECCION_ENCASILLADA"));
			 }
			 if(atriGenerales.indexOf("SEXO") != -1){
				 reporteDetVO.setSexo(rst.getString("SEXO"));
			 }
			 if(atriGenerales.indexOf("FECHA_NACIMIENTO") != -1){
				 reporteDetVO.setFechaNacimiento(rst.getString("FECHA_NACIMIENTO"));
			 }
			 if(atriGenerales.indexOf("VFL_CODIGO_COMUNA") != -1){
				 reporteDetVO.setComunaCorregimiento(rst.getString("VFL_CODIGO_COMUNA"));
			 }
			 if(atriGenerales.indexOf("VFL_CODIGO_ZONA") != -1){
				 reporteDetVO.setZona(rst.getString("VFL_CODIGO_ZONA"));
			 }
			 if(atriGenerales.indexOf("LOCALIZACION_COBAMA") != -1){
				 reporteDetVO.setLocalizacion(rst.getString("LOCALIZACION_COBAMA"));
			 }
			 if(atriGenerales.indexOf("VFL_CODIGO_BARRIO") != -1){
				 reporteDetVO.setBarrioVereda(rst.getString("VFL_CODIGO_BARRIO"));
			 }
			 if(atriGenerales.indexOf("TELEFONO") != -1){
				 reporteDetVO.setTelefono(rst.getString("TELEFONO"));
			 }
			 if(atriGenerales.indexOf("ETNIA") != -1){
				 reporteDetVO.setEtnia(rst.getString("ETNIA"));
			 }
			 if(atriGenerales.indexOf("CORREO_ELECTRONICO") != -1){
				 reporteDetVO.setCorreElectronico(rst.getString("CORREO_ELECTRONICO"));
			 }
			 if(atriGenerales.indexOf("FICHA_SISBEN") != -1){
				 reporteDetVO.setFichaSisben(rst.getString("FICHA_SISBEN"));
			 }
			 if(atriGenerales.indexOf("HOGAR_SISBEN") != -1){
				 reporteDetVO.setHogarSisben(rst.getString("HOGAR_SISBEN"));
			 }
			 if(atriGenerales.indexOf("ORDEN_SISBEN") != -1){
				 reporteDetVO.setOrdenSisben(rst.getString("ORDEN_SISBEN"));
			 }
			 if(atriGenerales.indexOf("NIVEL_SISBEN") != -1){
				 reporteDetVO.setNivelSisben(rst.getString("NIVEL_SISBEN"));
			 }
			 if(atriGenerales.indexOf("PUNTAJE_SISBEN") != -1){
				 reporteDetVO.setPuntajeSisben(rst.getString("PUNTAJE_SISBEN"));
			 }
			 if(atriGenerales.indexOf("FE_ENCUESTA_SISBEN") != -1){
				 reporteDetVO.setFechaEncuesta(rst.getString("FE_ENCUESTA_SISBEN"));
			 }
			 if(atriGenerales.indexOf("DISCAPACIDAD_SISBEN") != -1){
				 reporteDetVO.setDiscapacidad(rst.getString("DISCAPACIDAD_SISBEN"));
			 }
//			   if(atriGenerales.indexOf("TERCERO") != -1){
//				   reporteDetVO.setTercero(rst.getString("TERCERO"));
//			   } 
		 }
		 if(codiEspecificos != null){
			 /*La division en condicionales teniendo en cuenta el tamano de la lista de atributos
			 especificos se hace con el objetivo de minimizar el numero de comparaciones*/
			 if(tamanolatriEsp <= 50 || tamanolatriEsp >= 50){
				 if(atriEspecificos.indexOf("CAMPO1") != -1){
					reporteDetVO.setCampo1(rst.getString("CAMPO1"));
				 }
				 if(atriEspecificos.indexOf("CAMPO2") != -1){
					reporteDetVO.setCampo2(rst.getString("CAMPO2"));
				 }
				 if(atriEspecificos.indexOf("CAMPO3") != -1){
					reporteDetVO.setCampo3(rst.getString("CAMPO3"));
				 }
				 if(atriEspecificos.indexOf("CAMPO4") != -1){
					reporteDetVO.setCampo4(rst.getString("CAMPO4"));
				 }
				 if(atriEspecificos.indexOf("CAMPO5") != -1){
					reporteDetVO.setCampo5(rst.getString("CAMPO5"));
				 }
				 if(atriEspecificos.indexOf("CAMPO6") != -1){
					reporteDetVO.setCampo6(rst.getString("CAMPO6"));
				 }
				 if(atriEspecificos.indexOf("CAMPO7") != -1){
					reporteDetVO.setCampo7(rst.getString("CAMPO7"));
				 }
				 if(atriEspecificos.indexOf("CAMPO8") != -1){
					reporteDetVO.setCampo8(rst.getString("CAMPO8"));
				 }
				 if(atriEspecificos.indexOf("CAMPO9") != -1){
					reporteDetVO.setCampo9(rst.getString("CAMPO9"));
				 }
				 if(atriEspecificos.indexOf("CAMPO10") != -1){
					reporteDetVO.setCampo10(rst.getString("CAMPO10"));
				 }                
                 
				 if(tamanolatriEsp > 10){
					 if(atriEspecificos.indexOf("CAMPO11") != -1){
						 reporteDetVO.setCampo11(rst.getString("CAMPO11"));
					 }
					 if(atriEspecificos.indexOf("CAMPO12") != -1){
						 reporteDetVO.setCampo12(rst.getString("CAMPO12"));
					 }
					 if(atriEspecificos.indexOf("CAMPO13") != -1){
						 reporteDetVO.setCampo13(rst.getString("CAMPO13"));
					 }
					 if(atriEspecificos.indexOf("CAMPO14") != -1){
						 reporteDetVO.setCampo14(rst.getString("CAMPO14"));
					 }
					 if(atriEspecificos.indexOf("CAMPO15") != -1){
						 reporteDetVO.setCampo15(rst.getString("CAMPO15"));
					 }
					 if(atriEspecificos.indexOf("CAMPO16") != -1){
						 reporteDetVO.setCampo16(rst.getString("CAMPO16"));
					 }
					 if(atriEspecificos.indexOf("CAMPO17") != -1){
						 reporteDetVO.setCampo17(rst.getString("CAMPO17"));
					 }
					 if(atriEspecificos.indexOf("CAMPO18") != -1){
						 reporteDetVO.setCampo18(rst.getString("CAMPO18"));
					 }
					 if(atriEspecificos.indexOf("CAMPO19") != -1){
						 reporteDetVO.setCampo19(rst.getString("CAMPO19"));
					 }
					 if(atriEspecificos.indexOf("CAMPO20") != -1){
						 reporteDetVO.setCampo20(rst.getString("CAMPO20"));
					 }
				 }
				 if(tamanolatriEsp > 20){
					 if(atriEspecificos.indexOf("CAMPO21") != -1){
						reporteDetVO.setCampo21(rst.getString("CAMPO21"));
					 }
					 if(atriEspecificos.indexOf("CAMPO22") != -1){
						reporteDetVO.setCampo22(rst.getString("CAMPO22"));
					 }
					 if(atriEspecificos.indexOf("CAMPO23") != -1){
						reporteDetVO.setCampo23(rst.getString("CAMPO23"));
					 }
					 if(atriEspecificos.indexOf("CAMPO24") != -1){
						reporteDetVO.setCampo24(rst.getString("CAMPO24"));
					 }
					 if(atriEspecificos.indexOf("CAMPO25") != -1){
						reporteDetVO.setCampo25(rst.getString("CAMPO25"));
					 }
					 if(atriEspecificos.indexOf("CAMPO26") != -1){
						reporteDetVO.setCampo26(rst.getString("CAMPO26"));
					 }
					 if(atriEspecificos.indexOf("CAMPO27") != -1){
						reporteDetVO.setCampo27(rst.getString("CAMPO27"));
					 }
					 if(atriEspecificos.indexOf("CAMPO28") != -1){
						reporteDetVO.setCampo28(rst.getString("CAMPO28"));
					 }
					 if(atriEspecificos.indexOf("CAMPO29") != -1){
						reporteDetVO.setCampo29(rst.getString("CAMPO29"));
					 }
					 if(atriEspecificos.indexOf("CAMPO30") != -1){
						reporteDetVO.setCampo30(rst.getString("CAMPO30"));
					 }
				 }
				 if(tamanolatriEsp > 30){
					 if(atriEspecificos.indexOf("CAMPO31") != -1){
						 reporteDetVO.setCampo31(rst.getString("CAMPO31"));
					 }
					 if(atriEspecificos.indexOf("CAMPO32") != -1){
						 reporteDetVO.setCampo32(rst.getString("CAMPO32"));
					 }
					 if(atriEspecificos.indexOf("CAMPO33") != -1){
						 reporteDetVO.setCampo33(rst.getString("CAMPO33"));
					 }
					 if(atriEspecificos.indexOf("CAMPO34") != -1){
						 reporteDetVO.setCampo34(rst.getString("CAMPO34"));
					 }
					 if(atriEspecificos.indexOf("CAMPO35") != -1){
						 reporteDetVO.setCampo35(rst.getString("CAMPO35"));
					 } 
					 if(atriEspecificos.indexOf("CAMPO36") != -1){
						 reporteDetVO.setCampo36(rst.getString("CAMPO36"));
					 }
					 if(atriEspecificos.indexOf("CAMPO37") != -1){
						 reporteDetVO.setCampo37(rst.getString("CAMPO37"));
					 }
					 if(atriEspecificos.indexOf("CAMPO38") != -1){
						 reporteDetVO.setCampo38(rst.getString("CAMPO38"));
					 }
					 if(atriEspecificos.indexOf("CAMPO39") != -1){
						 reporteDetVO.setCampo39(rst.getString("CAMPO39"));
					 }
					 if(atriEspecificos.indexOf("CAMPO40") != -1){
						 reporteDetVO.setCampo40(rst.getString("CAMPO40"));
					 }
				 }
				 if(tamanolatriEsp > 40){
					 if(atriEspecificos.indexOf("CAMPO41") != -1){
						reporteDetVO.setCampo41(rst.getString("CAMPO41"));
					 }
					 if(atriEspecificos.indexOf("CAMPO42") != -1){
						reporteDetVO.setCampo42(rst.getString("CAMPO42"));
					 }
					 if(atriEspecificos.indexOf("CAMPO43") != -1){
						reporteDetVO.setCampo43(rst.getString("CAMPO43"));
					 }
					 if(atriEspecificos.indexOf("CAMPO44") != -1){
						reporteDetVO.setCampo44(rst.getString("CAMPO44"));
					 }
					 if(atriEspecificos.indexOf("CAMPO45") != -1){
						reporteDetVO.setCampo45(rst.getString("CAMPO45"));
					 }
					 if(atriEspecificos.indexOf("CAMPO46") != -1){
						reporteDetVO.setCampo46(rst.getString("CAMPO46"));
					 }
					 if(atriEspecificos.indexOf("CAMPO47") != -1){
						reporteDetVO.setCampo47(rst.getString("CAMPO47"));
					 }
					 if(atriEspecificos.indexOf("CAMPO48") != -1){
						reporteDetVO.setCampo48(rst.getString("CAMPO48"));
					 }
					 if(atriEspecificos.indexOf("CAMPO49") != -1){
						reporteDetVO.setCampo49(rst.getString("CAMPO49"));
					 }
					 if(atriEspecificos.indexOf("CAMPO50") != -1){
						reporteDetVO.setCampo50(rst.getString("CAMPO50"));
					 }
				 }
			 }
			 if(tamanolatriEsp > 50){
				 if(atriEspecificos.indexOf("CAMPO51") != -1){
					reporteDetVO.setCampo51(rst.getString("CAMPO51"));
				 }
				 if(atriEspecificos.indexOf("CAMPO52") != -1){
					reporteDetVO.setCampo52(rst.getString("CAMPO52"));
				 }
				 if(atriEspecificos.indexOf("CAMPO53") != -1){
					reporteDetVO.setCampo53(rst.getString("CAMPO53"));
				 }
				 if(atriEspecificos.indexOf("CAMPO54") != -1){
					reporteDetVO.setCampo54(rst.getString("CAMPO54"));
				 }
				 if(atriEspecificos.indexOf("CAMPO55") != -1){
					reporteDetVO.setCampo55(rst.getString("CAMPO55"));
				 }
				 if(atriEspecificos.indexOf("CAMPO56") != -1){
					reporteDetVO.setCampo56(rst.getString("CAMPO56"));
				 }
				 if(atriEspecificos.indexOf("CAMPO57") != -1){
					reporteDetVO.setCampo57(rst.getString("CAMPO57"));
				 }
				 if(atriEspecificos.indexOf("CAMPO58") != -1){
					reporteDetVO.setCampo58(rst.getString("CAMPO58"));
				 }
				 if(atriEspecificos.indexOf("CAMPO59") != -1){
					reporteDetVO.setCampo59(rst.getString("CAMPO59"));
				 }
				 if(atriEspecificos.indexOf("CAMPO60") != -1){
					reporteDetVO.setCampo60(rst.getString("CAMPO60"));
				 }
                                 
				 if(tamanolatriEsp > 60){
					 if(atriEspecificos.indexOf("CAMPO61") != -1){
						reporteDetVO.setCampo61(rst.getString("CAMPO61"));
					 }
					 if(atriEspecificos.indexOf("CAMPO62") != -1){
						reporteDetVO.setCampo62(rst.getString("CAMPO62"));
					 }
					 if(atriEspecificos.indexOf("CAMPO63") != -1){
						reporteDetVO.setCampo63(rst.getString("CAMPO63"));
					 }
					 if(atriEspecificos.indexOf("CAMPO64") != -1){
						reporteDetVO.setCampo64(rst.getString("CAMPO64"));
					 }
					 if(atriEspecificos.indexOf("CAMPO65") != -1){
						reporteDetVO.setCampo65(rst.getString("CAMPO65"));
					 }
					 if(atriEspecificos.indexOf("CAMPO66") != -1){
						reporteDetVO.setCampo66(rst.getString("CAMPO66"));
					 }
					 if(atriEspecificos.indexOf("CAMPO67") != -1){
						reporteDetVO.setCampo67(rst.getString("CAMPO67"));
					 }
					 if(atriEspecificos.indexOf("CAMPO68") != -1){
						reporteDetVO.setCampo68(rst.getString("CAMPO68"));
					 }
					 if(atriEspecificos.indexOf("CAMPO69") != -1){
						reporteDetVO.setCampo69(rst.getString("CAMPO69"));
					 }
					 if(atriEspecificos.indexOf("CAMPO70") != -1){
						reporteDetVO.setCampo70(rst.getString("CAMPO70"));
					 }
				 }
				 if(tamanolatriEsp > 70){
					 if(atriEspecificos.indexOf("CAMPO71") != -1){
						reporteDetVO.setCampo71(rst.getString("CAMPO71"));
					 }
					 if(atriEspecificos.indexOf("CAMPO72") != -1){
						reporteDetVO.setCampo72(rst.getString("CAMPO72"));
					 }
					 if(atriEspecificos.indexOf("CAMPO73") != -1){
						reporteDetVO.setCampo73(rst.getString("CAMPO73"));
					 }
					 if(atriEspecificos.indexOf("CAMPO74") != -1){
						reporteDetVO.setCampo74(rst.getString("CAMPO74"));
					 }
					 if(atriEspecificos.indexOf("CAMPO75") != -1){
						reporteDetVO.setCampo75(rst.getString("CAMPO75"));
					 }
					 if(atriEspecificos.indexOf("CAMPO76") != -1){
						reporteDetVO.setCampo76(rst.getString("CAMPO76"));
					 }
					 if(atriEspecificos.indexOf("CAMPO77") != -1){
						reporteDetVO.setCampo77(rst.getString("CAMPO77"));
					 }
					 if(atriEspecificos.indexOf("CAMPO78") != -1){
						reporteDetVO.setCampo78(rst.getString("CAMPO78"));
					 }
					 if(atriEspecificos.indexOf("CAMPO79") != -1){
						reporteDetVO.setCampo79(rst.getString("CAMPO79"));
					 }
					 if(atriEspecificos.indexOf("CAMPO80") != -1){
						reporteDetVO.setCampo80(rst.getString("CAMPO80"));
					 }
				 }
				 if(tamanolatriEsp > 80){
					 if(atriEspecificos.indexOf("CAMPO81") != -1){
						reporteDetVO.setCampo81(rst.getString("CAMPO81"));
					 }
					 if(atriEspecificos.indexOf("CAMPO82") != -1){
						reporteDetVO.setCampo82(rst.getString("CAMPO82"));
					 }
					 if(atriEspecificos.indexOf("CAMPO83") != -1){
						reporteDetVO.setCampo83(rst.getString("CAMPO83"));
					 }
					 if(atriEspecificos.indexOf("CAMPO84") != -1){
						reporteDetVO.setCampo84(rst.getString("CAMPO84"));
					 }
					 if(atriEspecificos.indexOf("CAMPO85") != -1){
						reporteDetVO.setCampo85(rst.getString("CAMPO85"));
					 } 
					 if(atriEspecificos.indexOf("CAMPO86") != -1){
						reporteDetVO.setCampo86(rst.getString("CAMPO86"));
					 }
					 if(atriEspecificos.indexOf("CAMPO87") != -1){
						reporteDetVO.setCampo87(rst.getString("CAMPO87"));
					 }
					 if(atriEspecificos.indexOf("CAMPO88") != -1){
						reporteDetVO.setCampo88(rst.getString("CAMPO88"));
					 }
					 if(atriEspecificos.indexOf("CAMPO89") != -1){
						reporteDetVO.setCampo89(rst.getString("CAMPO89"));
					 }
					 if(atriEspecificos.indexOf("CAMPO90") != -1){
						reporteDetVO.setCampo90(rst.getString("CAMPO90"));
					 }
				 }
				 if(tamanolatriEsp > 90){
					 if(atriEspecificos.indexOf("CAMPO91") != -1){
						reporteDetVO.setCampo91(rst.getString("CAMPO91"));
					 }
					 if(atriEspecificos.indexOf("CAMPO92") != -1){
						reporteDetVO.setCampo92(rst.getString("CAMPO92"));
					 }
					 if(atriEspecificos.indexOf("CAMPO93") != -1){
						reporteDetVO.setCampo93(rst.getString("CAMPO93"));
					 }
					 if(atriEspecificos.indexOf("CAMPO94") != -1){
						reporteDetVO.setCampo94(rst.getString("CAMPO94"));
					 }
					 if(atriEspecificos.indexOf("CAMPO95") != -1){
						reporteDetVO.setCampo95(rst.getString("CAMPO95"));
					 }
					 if(atriEspecificos.indexOf("CAMPO96") != -1){
						reporteDetVO.setCampo96(rst.getString("CAMPO96"));
					 }
					 if(atriEspecificos.indexOf("CAMPO97") != -1){
						reporteDetVO.setCampo97(rst.getString("CAMPO97"));
					 }
					 if(atriEspecificos.indexOf("CAMPO98") != -1){
						reporteDetVO.setCampo98(rst.getString("CAMPO98"));
					 }
					 if(atriEspecificos.indexOf("CAMPO99") != -1){
						reporteDetVO.setCampo99(rst.getString("CAMPO99"));
					 }
					 if(atriEspecificos.indexOf("CAMPO100") != -1){
						reporteDetVO.setCampo100(rst.getString("CAMPO100"));
					 }
				 }
			 }
		 }
         
		 reporteDetVO.setFechaBeneficio(rst.getString("FECHA_BENEFICIO"));
		 reporteDetVO.setValor(rst.getInt("VALOR"));
		 reporteDetVO.setTercero(rst.getString("TERCERO"));
         
		 beneficiarios.add(reporteDetVO);
	 }
     
	 cf.closeConnection(conn);
	 conn = null;
     
	 return beneficiarios;
   }
   
	public Collection getReporteConGestor(List atributosGenericos, List atributosEspecificos, 
						  List filtros, ConnectionFactory cf, RepDetBOTVO criterea) throws SQLException
	{
	  Collection beneficiarios = new LinkedList();
	  List latributosEspecificos = atributosEspecificos;
	  List latributosGenericos = atributosGenericos;
      
	  RepAtributoVO atrVO = null;
      
	  cf.closeConnection(conn);
      
	  String atriGenerales = null;
	  String atriEspecificos = null;
	  String codiEspecificos = null;
	  String filtrosGenerales = "'"+checkFiltros((Collection)filtros)+"'";
	  String filtrosEspecificos = null;
	  if(criterea.getCodigoAtrGestor() != null && criterea.getGestor() != null){
		  filtrosEspecificos = "'"+checkFiltrosEspecificos((Collection)filtros)+
							   " AND NVL(Fcs_Ben_Valor_Atributo("+criterea.getCodigoAtrGestor()+", " +
							   " bot.codigo, ben.codigo, bot.FECHA_BENEFICIO),'' '') = TO_CHAR(''"+criterea.getGestor()+"'')'";
	  } else {
		  filtrosEspecificos = "'"+checkFiltrosEspecificos((Collection)filtros)+"'";
	  }
      
	  int tamanolatriEsp = latributosEspecificos.size();
	  String Desde = criterea.getDesde();
	  String Hasta = criterea.getHasta();
      
	  if(Desde != null){
		  Desde = "'"+Desde+"'";
	  }
	  if(Hasta != null){
		  Hasta = "'"+Hasta+"'";
	  }

	  if(latributosGenericos.size() > 0){
		  atriGenerales = "";
          
		  for(int i = 0; i < latributosGenericos.size(); i++){
			  atrVO = (RepAtributoVO)latributosGenericos.get(i);
              
			  atriGenerales +=  atrVO.getNombre()+"|";           
		  }
          
		  atriGenerales = "'"+atriGenerales+"'";
	  }    
      
	  if(tamanolatriEsp > 0){
		  codiEspecificos = "";
		  atriEspecificos = "";
          
		  for(int i=0; i < tamanolatriEsp; i++) {
			  atrVO = (RepAtributoVO)latributosEspecificos.get(i);
              
			  codiEspecificos += atrVO.getCodigo()+"|";
			  atriEspecificos += " CAMPO"+(i+1)+" ";
		  }

		  codiEspecificos = "'"+codiEspecificos+"'";
	  }
            
	  conn = cf.getConnection();
      
	  String strSql = "{call beneficios.PCS_REP_BENEFICIO_OTORGADOEG("+atriGenerales+", "+tamanolatriEsp+", "+codiEspecificos+"," +
				  ""+filtrosGenerales+","+filtrosEspecificos+", "+criterea.getCodeSede()+", "+criterea.getCodeSubprograma()+", " +
				  Desde+", "+Hasta+", ?)}";
      
	  CallableStatement stmt = conn.prepareCall(strSql);
	  stmt.registerOutParameter(1, OracleTypes.CURSOR);
	  stmt.execute();
      
	  ResultSet rst = (ResultSet)stmt.getObject(1);
	  ReporteDetVO reporteDetVO = null;
      
	  while(rst.next()){
		  reporteDetVO = new ReporteDetVO();
		  if(atriGenerales != null){
			  if(atriGenerales.indexOf("TIPO_DOCUMENTO") != -1){
				  reporteDetVO.setTipoDocumento(rst.getString("TIPO_DOCUMENTO"));
			  }
			  if(atriGenerales.indexOf("NUMERO_DOCUMENTO") != -1){
				  reporteDetVO.setNumeroDocumento(rst.getString("NUMERO_DOCUMENTO"));
			  }
			  if(atriGenerales.indexOf("PRIMER_NOMBRE") != -1){
				  reporteDetVO.setPrimerNombre(rst.getString("PRIMER_NOMBRE"));
			  }
			  if(atriGenerales.indexOf("SEGUNDO_NOMBRE") != -1){
				  reporteDetVO.setSegundoNombre(rst.getString("SEGUNDO_NOMBRE"));
			  }
			  if(atriGenerales.indexOf("PRIMER_APELLIDO") != -1){
				  reporteDetVO.setPrimerApellido(rst.getString("PRIMER_APELLIDO"));
			  }
			  if(atriGenerales.indexOf("SEGUNDO_APELLIDO") != -1){
				  reporteDetVO.setSegundoApellido(rst.getString("SEGUNDO_APELLIDO"));
			  }
			  if(atriGenerales.indexOf("DIRECCION_DESCRIPTIVA") != -1){
				  reporteDetVO.setDirDescriptiva(rst.getString("DIRECCION_DESCRIPTIVA"));
			  }
			  if(atriGenerales.indexOf("DIRECCION_ENCASILLADA") != -1){
				  reporteDetVO.setDirEncasillada(rst.getString("DIRECCION_ENCASILLADA"));
			  }
			  if(atriGenerales.indexOf("SEXO") != -1){
				  reporteDetVO.setSexo(rst.getString("SEXO"));
			  }
			  if(atriGenerales.indexOf("FECHA_NACIMIENTO") != -1){
				  reporteDetVO.setFechaNacimiento(rst.getString("FECHA_NACIMIENTO"));
			  }
			  if(atriGenerales.indexOf("VFL_CODIGO_COMUNA") != -1){
				  reporteDetVO.setComunaCorregimiento(rst.getString("VFL_CODIGO_COMUNA"));
			  }
			  if(atriGenerales.indexOf("VFL_CODIGO_ZONA") != -1){
				  reporteDetVO.setZona(rst.getString("VFL_CODIGO_ZONA"));
			  }
			  if(atriGenerales.indexOf("LOCALIZACION_COBAMA") != -1){
				  reporteDetVO.setLocalizacion(rst.getString("LOCALIZACION_COBAMA"));
			  }
			  if(atriGenerales.indexOf("VFL_CODIGO_BARRIO") != -1){
				  reporteDetVO.setBarrioVereda(rst.getString("VFL_CODIGO_BARRIO"));
			  }
			  if(atriGenerales.indexOf("TELEFONO") != -1){
				  reporteDetVO.setTelefono(rst.getString("TELEFONO"));
			  }
			  if(atriGenerales.indexOf("ETNIA") != -1){
				  reporteDetVO.setEtnia(rst.getString("ETNIA"));
			  }
			  if(atriGenerales.indexOf("CORREO_ELECTRONICO") != -1){
				  reporteDetVO.setCorreElectronico(rst.getString("CORREO_ELECTRONICO"));
			  }
			  if(atriGenerales.indexOf("FICHA_SISBEN") != -1){
				  reporteDetVO.setFichaSisben(rst.getString("FICHA_SISBEN"));
			  }
			  if(atriGenerales.indexOf("HOGAR_SISBEN") != -1){
				  reporteDetVO.setHogarSisben(rst.getString("HOGAR_SISBEN"));
			  }
			  if(atriGenerales.indexOf("ORDEN_SISBEN") != -1){
				  reporteDetVO.setOrdenSisben(rst.getString("ORDEN_SISBEN"));
			  }
			  if(atriGenerales.indexOf("NIVEL_SISBEN") != -1){
				  reporteDetVO.setNivelSisben(rst.getString("NIVEL_SISBEN"));
			  }
			  if(atriGenerales.indexOf("PUNTAJE_SISBEN") != -1){
				  reporteDetVO.setPuntajeSisben(rst.getString("PUNTAJE_SISBEN"));
			  }
			  if(atriGenerales.indexOf("FE_ENCUESTA_SISBEN") != -1){
				  reporteDetVO.setFechaEncuesta(rst.getString("FE_ENCUESTA_SISBEN"));
			  }
			  if(atriGenerales.indexOf("DISCAPACIDAD_SISBEN") != -1){
				  reporteDetVO.setDiscapacidad(rst.getString("DISCAPACIDAD_SISBEN"));
			  }           
		  }
		  if(codiEspecificos != null){
			  /*La divisiï¿½n en condicionales teniendo en cuenta el tamaï¿½o de la lista de atributos
			  especificos se hace con el objetivo de minimizar el nï¿½mero de comparaciones*/
			  if(tamanolatriEsp <= 50 || tamanolatriEsp >= 50){
				  if(atriEspecificos.indexOf("CAMPO1") != -1){
					 reporteDetVO.setCampo1(rst.getString("CAMPO1"));
				  }
				  if(atriEspecificos.indexOf("CAMPO2") != -1){
					 reporteDetVO.setCampo2(rst.getString("CAMPO2"));
				  }
				  if(atriEspecificos.indexOf("CAMPO3") != -1){
					 reporteDetVO.setCampo3(rst.getString("CAMPO3"));
				  }
				  if(atriEspecificos.indexOf("CAMPO4") != -1){
					 reporteDetVO.setCampo4(rst.getString("CAMPO4"));
				  }
				  if(atriEspecificos.indexOf("CAMPO5") != -1){
					 reporteDetVO.setCampo5(rst.getString("CAMPO5"));
				  }
				  if(atriEspecificos.indexOf("CAMPO6") != -1){
					 reporteDetVO.setCampo6(rst.getString("CAMPO6"));
				  }
				  if(atriEspecificos.indexOf("CAMPO7") != -1){
					 reporteDetVO.setCampo7(rst.getString("CAMPO7"));
				  }
				  if(atriEspecificos.indexOf("CAMPO8") != -1){
					 reporteDetVO.setCampo8(rst.getString("CAMPO8"));
				  }
				  if(atriEspecificos.indexOf("CAMPO9") != -1){
					 reporteDetVO.setCampo9(rst.getString("CAMPO9"));
				  }
				  if(atriEspecificos.indexOf("CAMPO10") != -1){
					 reporteDetVO.setCampo10(rst.getString("CAMPO10"));
				  }                
                  
				  if(tamanolatriEsp > 10){
					  if(atriEspecificos.indexOf("CAMPO11") != -1){
						  reporteDetVO.setCampo11(rst.getString("CAMPO11"));
					  }
					  if(atriEspecificos.indexOf("CAMPO12") != -1){
						  reporteDetVO.setCampo12(rst.getString("CAMPO12"));
					  }
					  if(atriEspecificos.indexOf("CAMPO13") != -1){
						  reporteDetVO.setCampo13(rst.getString("CAMPO13"));
					  }
					  if(atriEspecificos.indexOf("CAMPO14") != -1){
						  reporteDetVO.setCampo14(rst.getString("CAMPO14"));
					  }
					  if(atriEspecificos.indexOf("CAMPO15") != -1){
						  reporteDetVO.setCampo15(rst.getString("CAMPO15"));
					  }
					  if(atriEspecificos.indexOf("CAMPO16") != -1){
						  reporteDetVO.setCampo16(rst.getString("CAMPO16"));
					  }
					  if(atriEspecificos.indexOf("CAMPO17") != -1){
						  reporteDetVO.setCampo17(rst.getString("CAMPO17"));
					  }
					  if(atriEspecificos.indexOf("CAMPO18") != -1){
						  reporteDetVO.setCampo18(rst.getString("CAMPO18"));
					  }
					  if(atriEspecificos.indexOf("CAMPO19") != -1){
						  reporteDetVO.setCampo19(rst.getString("CAMPO19"));
					  }
					  if(atriEspecificos.indexOf("CAMPO20") != -1){
						  reporteDetVO.setCampo20(rst.getString("CAMPO20"));
					  }
				  }
				  if(tamanolatriEsp > 20){
					  if(atriEspecificos.indexOf("CAMPO21") != -1){
						 reporteDetVO.setCampo21(rst.getString("CAMPO21"));
					  }
					  if(atriEspecificos.indexOf("CAMPO22") != -1){
						 reporteDetVO.setCampo22(rst.getString("CAMPO22"));
					  }
					  if(atriEspecificos.indexOf("CAMPO23") != -1){
						 reporteDetVO.setCampo23(rst.getString("CAMPO23"));
					  }
					  if(atriEspecificos.indexOf("CAMPO24") != -1){
						 reporteDetVO.setCampo24(rst.getString("CAMPO24"));
					  }
					  if(atriEspecificos.indexOf("CAMPO25") != -1){
						 reporteDetVO.setCampo25(rst.getString("CAMPO25"));
					  }
					  if(atriEspecificos.indexOf("CAMPO26") != -1){
						 reporteDetVO.setCampo26(rst.getString("CAMPO26"));
					  }
					  if(atriEspecificos.indexOf("CAMPO27") != -1){
						 reporteDetVO.setCampo27(rst.getString("CAMPO27"));
					  }
					  if(atriEspecificos.indexOf("CAMPO28") != -1){
						 reporteDetVO.setCampo28(rst.getString("CAMPO28"));
					  }
					  if(atriEspecificos.indexOf("CAMPO29") != -1){
						 reporteDetVO.setCampo29(rst.getString("CAMPO29"));
					  }
					  if(atriEspecificos.indexOf("CAMPO30") != -1){
						 reporteDetVO.setCampo30(rst.getString("CAMPO30"));
					  }
				  }
				  if(tamanolatriEsp > 30){
					  if(atriEspecificos.indexOf("CAMPO31") != -1){
						  reporteDetVO.setCampo31(rst.getString("CAMPO31"));
					  }
					  if(atriEspecificos.indexOf("CAMPO32") != -1){
						  reporteDetVO.setCampo32(rst.getString("CAMPO32"));
					  }
					  if(atriEspecificos.indexOf("CAMPO33") != -1){
						  reporteDetVO.setCampo33(rst.getString("CAMPO33"));
					  }
					  if(atriEspecificos.indexOf("CAMPO34") != -1){
						  reporteDetVO.setCampo34(rst.getString("CAMPO34"));
					  }
					  if(atriEspecificos.indexOf("CAMPO35") != -1){
						  reporteDetVO.setCampo35(rst.getString("CAMPO35"));
					  } 
					  if(atriEspecificos.indexOf("CAMPO36") != -1){
						  reporteDetVO.setCampo36(rst.getString("CAMPO36"));
					  }
					  if(atriEspecificos.indexOf("CAMPO37") != -1){
						  reporteDetVO.setCampo37(rst.getString("CAMPO37"));
					  }
					  if(atriEspecificos.indexOf("CAMPO38") != -1){
						  reporteDetVO.setCampo38(rst.getString("CAMPO38"));
					  }
					  if(atriEspecificos.indexOf("CAMPO39") != -1){
						  reporteDetVO.setCampo39(rst.getString("CAMPO39"));
					  }
					  if(atriEspecificos.indexOf("CAMPO40") != -1){
						  reporteDetVO.setCampo40(rst.getString("CAMPO40"));
					  }
				  }
				  if(tamanolatriEsp > 40){
					  if(atriEspecificos.indexOf("CAMPO41") != -1){
						 reporteDetVO.setCampo41(rst.getString("CAMPO41"));
					  }
					  if(atriEspecificos.indexOf("CAMPO42") != -1){
						 reporteDetVO.setCampo42(rst.getString("CAMPO42"));
					  }
					  if(atriEspecificos.indexOf("CAMPO43") != -1){
						 reporteDetVO.setCampo43(rst.getString("CAMPO43"));
					  }
					  if(atriEspecificos.indexOf("CAMPO44") != -1){
						 reporteDetVO.setCampo44(rst.getString("CAMPO44"));
					  }
					  if(atriEspecificos.indexOf("CAMPO45") != -1){
						 reporteDetVO.setCampo45(rst.getString("CAMPO45"));
					  }
					  if(atriEspecificos.indexOf("CAMPO46") != -1){
						 reporteDetVO.setCampo46(rst.getString("CAMPO46"));
					  }
					  if(atriEspecificos.indexOf("CAMPO47") != -1){
						 reporteDetVO.setCampo47(rst.getString("CAMPO47"));
					  }
					  if(atriEspecificos.indexOf("CAMPO48") != -1){
						 reporteDetVO.setCampo48(rst.getString("CAMPO48"));
					  }
					  if(atriEspecificos.indexOf("CAMPO49") != -1){
						 reporteDetVO.setCampo49(rst.getString("CAMPO49"));
					  }
					  if(atriEspecificos.indexOf("CAMPO50") != -1){
						 reporteDetVO.setCampo50(rst.getString("CAMPO50"));
					  }
				  }
			  }
			  if(tamanolatriEsp > 50){
				  if(atriEspecificos.indexOf("CAMPO51") != -1){
					 reporteDetVO.setCampo51(rst.getString("CAMPO51"));
				  }
				  if(atriEspecificos.indexOf("CAMPO52") != -1){
					 reporteDetVO.setCampo52(rst.getString("CAMPO52"));
				  }
				  if(atriEspecificos.indexOf("CAMPO53") != -1){
					 reporteDetVO.setCampo53(rst.getString("CAMPO53"));
				  }
				  if(atriEspecificos.indexOf("CAMPO54") != -1){
					 reporteDetVO.setCampo54(rst.getString("CAMPO54"));
				  }
				  if(atriEspecificos.indexOf("CAMPO55") != -1){
					 reporteDetVO.setCampo55(rst.getString("CAMPO55"));
				  }
				  if(atriEspecificos.indexOf("CAMPO56") != -1){
					 reporteDetVO.setCampo56(rst.getString("CAMPO56"));
				  }
				  if(atriEspecificos.indexOf("CAMPO57") != -1){
					 reporteDetVO.setCampo57(rst.getString("CAMPO57"));
				  }
				  if(atriEspecificos.indexOf("CAMPO58") != -1){
					 reporteDetVO.setCampo58(rst.getString("CAMPO58"));
				  }
				  if(atriEspecificos.indexOf("CAMPO59") != -1){
					 reporteDetVO.setCampo59(rst.getString("CAMPO59"));
				  }
				  if(atriEspecificos.indexOf("CAMPO60") != -1){
					 reporteDetVO.setCampo60(rst.getString("CAMPO60"));
				  }
                                  
				  if(tamanolatriEsp > 60){
					  if(atriEspecificos.indexOf("CAMPO61") != -1){
						 reporteDetVO.setCampo61(rst.getString("CAMPO61"));
					  }
					  if(atriEspecificos.indexOf("CAMPO62") != -1){
						 reporteDetVO.setCampo62(rst.getString("CAMPO62"));
					  }
					  if(atriEspecificos.indexOf("CAMPO63") != -1){
						 reporteDetVO.setCampo63(rst.getString("CAMPO63"));
					  }
					  if(atriEspecificos.indexOf("CAMPO64") != -1){
						 reporteDetVO.setCampo64(rst.getString("CAMPO64"));
					  }
					  if(atriEspecificos.indexOf("CAMPO65") != -1){
						 reporteDetVO.setCampo65(rst.getString("CAMPO65"));
					  }
					  if(atriEspecificos.indexOf("CAMPO66") != -1){
						 reporteDetVO.setCampo66(rst.getString("CAMPO66"));
					  }
					  if(atriEspecificos.indexOf("CAMPO67") != -1){
						 reporteDetVO.setCampo67(rst.getString("CAMPO67"));
					  }
					  if(atriEspecificos.indexOf("CAMPO68") != -1){
						 reporteDetVO.setCampo68(rst.getString("CAMPO68"));
					  }
					  if(atriEspecificos.indexOf("CAMPO69") != -1){
						 reporteDetVO.setCampo69(rst.getString("CAMPO69"));
					  }
					  if(atriEspecificos.indexOf("CAMPO70") != -1){
						 reporteDetVO.setCampo70(rst.getString("CAMPO70"));
					  }
				  }
				  if(tamanolatriEsp > 70){
					  if(atriEspecificos.indexOf("CAMPO71") != -1){
						 reporteDetVO.setCampo71(rst.getString("CAMPO71"));
					  }
					  if(atriEspecificos.indexOf("CAMPO72") != -1){
						 reporteDetVO.setCampo72(rst.getString("CAMPO72"));
					  }
					  if(atriEspecificos.indexOf("CAMPO73") != -1){
						 reporteDetVO.setCampo73(rst.getString("CAMPO73"));
					  }
					  if(atriEspecificos.indexOf("CAMPO74") != -1){
						 reporteDetVO.setCampo74(rst.getString("CAMPO74"));
					  }
					  if(atriEspecificos.indexOf("CAMPO75") != -1){
						 reporteDetVO.setCampo75(rst.getString("CAMPO75"));
					  }
					  if(atriEspecificos.indexOf("CAMPO76") != -1){
						 reporteDetVO.setCampo76(rst.getString("CAMPO76"));
					  }
					  if(atriEspecificos.indexOf("CAMPO77") != -1){
						 reporteDetVO.setCampo77(rst.getString("CAMPO77"));
					  }
					  if(atriEspecificos.indexOf("CAMPO78") != -1){
						 reporteDetVO.setCampo78(rst.getString("CAMPO78"));
					  }
					  if(atriEspecificos.indexOf("CAMPO79") != -1){
						 reporteDetVO.setCampo79(rst.getString("CAMPO79"));
					  }
					  if(atriEspecificos.indexOf("CAMPO80") != -1){
						 reporteDetVO.setCampo80(rst.getString("CAMPO80"));
					  }
				  }
				  if(tamanolatriEsp > 80){
					  if(atriEspecificos.indexOf("CAMPO81") != -1){
						 reporteDetVO.setCampo81(rst.getString("CAMPO81"));
					  }
					  if(atriEspecificos.indexOf("CAMPO82") != -1){
						 reporteDetVO.setCampo82(rst.getString("CAMPO82"));
					  }
					  if(atriEspecificos.indexOf("CAMPO83") != -1){
						 reporteDetVO.setCampo83(rst.getString("CAMPO83"));
					  }
					  if(atriEspecificos.indexOf("CAMPO84") != -1){
						 reporteDetVO.setCampo84(rst.getString("CAMPO84"));
					  }
					  if(atriEspecificos.indexOf("CAMPO85") != -1){
						 reporteDetVO.setCampo85(rst.getString("CAMPO85"));
					  } 
					  if(atriEspecificos.indexOf("CAMPO86") != -1){
						 reporteDetVO.setCampo86(rst.getString("CAMPO86"));
					  }
					  if(atriEspecificos.indexOf("CAMPO87") != -1){
						 reporteDetVO.setCampo87(rst.getString("CAMPO87"));
					  }
					  if(atriEspecificos.indexOf("CAMPO88") != -1){
						 reporteDetVO.setCampo88(rst.getString("CAMPO88"));
					  }
					  if(atriEspecificos.indexOf("CAMPO89") != -1){
						 reporteDetVO.setCampo89(rst.getString("CAMPO89"));
					  }
					  if(atriEspecificos.indexOf("CAMPO90") != -1){
						 reporteDetVO.setCampo90(rst.getString("CAMPO90"));
					  }
				  }
				  if(tamanolatriEsp > 90){
					  if(atriEspecificos.indexOf("CAMPO91") != -1){
						 reporteDetVO.setCampo91(rst.getString("CAMPO91"));
					  }
					  if(atriEspecificos.indexOf("CAMPO92") != -1){
						 reporteDetVO.setCampo92(rst.getString("CAMPO92"));
					  }
					  if(atriEspecificos.indexOf("CAMPO93") != -1){
						 reporteDetVO.setCampo93(rst.getString("CAMPO93"));
					  }
					  if(atriEspecificos.indexOf("CAMPO94") != -1){
						 reporteDetVO.setCampo94(rst.getString("CAMPO94"));
					  }
					  if(atriEspecificos.indexOf("CAMPO95") != -1){
						 reporteDetVO.setCampo95(rst.getString("CAMPO95"));
					  }
					  if(atriEspecificos.indexOf("CAMPO96") != -1){
						 reporteDetVO.setCampo96(rst.getString("CAMPO96"));
					  }
					  if(atriEspecificos.indexOf("CAMPO97") != -1){
						 reporteDetVO.setCampo97(rst.getString("CAMPO97"));
					  }
					  if(atriEspecificos.indexOf("CAMPO98") != -1){
						 reporteDetVO.setCampo98(rst.getString("CAMPO98"));
					  }
					  if(atriEspecificos.indexOf("CAMPO99") != -1){
						 reporteDetVO.setCampo99(rst.getString("CAMPO99"));
					  }
					  if(atriEspecificos.indexOf("CAMPO100") != -1){
						 reporteDetVO.setCampo100(rst.getString("CAMPO100"));
					  }
				  }
			  }
		  }
          
		  reporteDetVO.setFechaBeneficio(rst.getString("FECHA_BENEFICIO"));
		  reporteDetVO.setValor(rst.getInt("VALOR"));
          
		  beneficiarios.add(reporteDetVO);
	  }
      
	  cf.closeConnection(conn);
	  conn = null;
      
	  return beneficiarios;
	}
  
  /*public Collection getReporte(List lBeneficioOtorg, Collection atributosGenericos, 
							  Collection atributosEspecificos, Collection filtros) throws SQLException
  {
	Collection beneficiosOtorgados = new LinkedList();
	RepDetBOTVO bot = null;
	for(int i=0;i<lBeneficioOtorg.size();i++)
	{
	  RepDetBeneficiarioVO objrdbVO = (RepDetBeneficiarioVO)lBeneficioOtorg.get(i);
	  bot = new RepDetBOTVO();
	  bot.setNombrePrograma(objrdbVO.getNombrePrograma());
	  bot.setCodeSubprograma(objrdbVO.getCodeSubprograma());
	  bot.setNombreSubprograma(objrdbVO.getNombreSubprograma());
	  bot.setCodeSede(objrdbVO.getCodeSede());
	  bot.setNombreSede(objrdbVO.getNombreSede());
	  bot.setFechabeneotorgado(objrdbVO.getFechabeneotorgado());
	  bot.setCodeBOT(objrdbVO.getCodebenotorgado());
      
	  conn = cf.getConnection();
	  bot.setAtributosGenerales(getAtributosGenerales(atributosGenericos,
									objrdbVO.getCodebenotorgado(),objrdbVO.getCodebeneficiario()
									,filtros));
	  cf.closeConnection(conn);
	  conn = null;
      
	  if(atributosEspecificos != null && atributosEspecificos.size() != 0)
	  {
		conn = cf.getConnection();
		bot.setAtributosEspecificos(getAtributosEspecificos(atributosEspecificos,
									   objrdbVO.getCodeSubprograma(),
									   objrdbVO.getCodeSede(),
									   objrdbVO.getCodebenotorgado(),
									   objrdbVO.getCodebeneficiario(),filtros));
        
		cf.closeConnection(conn);
		conn = null;
	  }else
	  {
		checkFiltersEsp = true;
	  }
	  if(checkFiltersEsp && checkFiltersGen)
	  {
		beneficiosOtorgados.add(bot);
	  } 
	  bot = null;
	  checkFiltersEsp = false;
	  checkFiltersGen = false;
      
	}
    
	return beneficiosOtorgados;
  }*/
  
  /*private Collection getAtributosGenerales(Collection atributosGenericos, 
										   Long codeBOT, Long codeBen, Collection filtros) throws SQLException
  {
	Collection repAtributos = new LinkedList();
	List atr = (List)atributosGenericos;
	boolean vflex = false;
	boolean barrio = false;
	boolean zona = false;
	boolean comuna = false;
	String query = "select ";
	RepAtributoVO atrVO = null;
	for(int i = 0; i< atr.size(); i++)
	{
	  atrVO = (RepAtributoVO)atr.get(i);
	  String nombre = atrVO.getNombre();
	  if(nombre.equals("TIPO_DOCUMENTO"))
	  {
		query += " decode(ben."+nombre+",'C','Cedula de ciudadania', "+
				 " 'E','Cedula de extranjeria', 'N','Nit', 'P','Pasaporte', "+
				 " 'R','Registro civil','T','Tarjeta de identidad','O','Otro', "+
				 " 'I','NIP','U','NUIP','S','NISE','A','Cabildo',ben."+nombre+") TIPO_DOCUMENTO,";
	  }else if(nombre.equals("ETNIA"))
	  {
		query += " nvl(decode(ben."+nombre+",'A','Afrocolombiano', "+
				  " 'I','Indigena','O','Otro', "+
				 "ben."+nombre+"),' ') ETNIA,";
	  }else if(nombre.equals("SEXO"))
	  {
		query += " nvl(decode(ben."+nombre+",'F','Femenino', "+
				  " 'M','Masculino' ,ben."+nombre+"),' ') SEXO,";
	  }else if(nombre.equals("VFL_CODIGO_BARRIO"))
	  {
		query += " vflexBarrio.descripcion VFL_CODIGO_BARRIO, ";
		barrio = true;
		vflex = true;
	  }else if(nombre.equals("VFL_CODIGO_ZONA"))
	  {
		query += " vflexZona.descripcion VFL_CODIGO_ZONA, ";
		zona = true;
		vflex = true;
	  }else if(nombre.equals("VFL_CODIGO_COMUNA"))
	  {
		query += " vflexComuna.descripcion VFL_CODIGO_COMUNA, ";
		comuna = true;
		vflex = true;
	  }else if(nombre.equals("FECHA_NACIMIENTO"))
	  {
		query += " nvl(to_char(ben.FECHA_NACIMIENTO,'DD/MM/RRRR'),' ') FECHA_NACIMIENTO, ";
	  }else if(nombre.equals("FE_ENCUESTA_SISBEN")){
		  query += " nvl(to_char(ben.FE_ENCUESTA_SISBEN,'DD/MM/RRRR'),' ') FE_ENCUESTA_SISBEN, ";
	  }else{
		query += "nvl(ben."+nombre+",' ') "+nombre+" ,";
	  }
	}
	if(!vflex)
	{
	  query += "to_char(rownum) numero "+
			 "from tcs_ben_beneficiario ben, "+
			 "       tcs_ben_beneficio_otorgado bot "+
			 " where bot.BEN_CODIGO = ben.CODIGO "+
			 " AND bot.FECHA_BENEFICIO <= sysdate "+
			 " and bot.CODIGO = "+codeBOT+
			 " and ben.codigo = "+codeBen+
			 checkFiltros(filtros);
	}else
	{
	  query += "to_char(rownum) numero "+
			 "from tcs_ben_beneficiario ben, ";
      
	  if(barrio)
	  {
		query += " paoyer.tcs_valor_flexible vflexBarrio, ";
	  }
	  if(zona)
	  {
		query += " paoyer.tcs_valor_flexible vflexZona, ";
	  }
	  if(comuna)
	  {
		query += " paoyer.tcs_valor_flexible vflexComuna, ";
	  }
	  query += " tcs_ben_beneficio_otorgado bot "+
			   " where bot.BEN_CODIGO = ben.CODIGO "+
			   " AND bot.FECHA_BENEFICIO <= sysdate "+
			   " and bot.CODIGO = "+codeBOT+
			   " and ben.codigo = "+codeBen+
			 checkFiltros(filtros);
	  if(barrio)
	  {
		query += " and vflexBarrio.CODIGO (+)= VFL_CODIGO_BARRIO";
	  }
	  if(zona)
	  {
		query += " and vflexZona.CODIGO (+)= VFL_CODIGO_ZONA";
	  }
	  if(comuna)
	  {
		query += " and vflexComuna.CODIGO (+)= VFL_CODIGO_COMUNA";
	  }
                     
	}
	//System.out.println(query);
	ResultSet rst = cf.getRecordsRset(query,null,conn);
    
	RepAtributoVO atributo = null;
    
	while(rst.next())
	{
	  for(int i = 0; i< atr.size(); i++)
	  {
		checkFiltersGen = true;
		atrVO = (RepAtributoVO)atr.get(i);
		atributo = new RepAtributoVO();
		atributo.setNumeroAtributo(i+1);
		atributo.setNombre(atrVO.getEtiqueta());
		atributo.setValor(rst.getString(i+1));
		repAtributos.add(atributo);
	  }  
	}
	rst.close();
	if(atr.size() == 0) checkFiltersGen = true;
    
	return repAtributos;
  }*/
  
   public Integer getCantidadBeneficiarios(List filtros, ConnectionFactory cf, RepDetBOTVO criterea) throws SQLException
	  {
	   cf.closeConnection(conn);
       
	   String filtrosGenerales = "'"+checkFiltros((Collection)filtros)+"'";
	   String filtrosEspecificos = null;
	   if(criterea.getCodigoAtrGestor() != null && criterea.getGestor() != null){
		   filtrosEspecificos = "'"+checkFiltrosEspecificos((Collection)filtros)+
								" AND NVL(Fcs_Ben_Valor_Atributo("+criterea.getCodigoAtrGestor()+", " +
								" bot.codigo, ben.codigo, bot.FECHA_BENEFICIO),'' '') = TO_CHAR(''"+criterea.getGestor()+"'')'";
	   } else {
		   filtrosEspecificos = "'"+checkFiltrosEspecificos((Collection)filtros)+"'";
	   }
       
	   String Desde = criterea.getDesde();
	   String Hasta = criterea.getHasta();
       
	   if(Desde != null){
		   Desde = "'"+Desde+"'";
	   }
	   if(Hasta != null){
		   Hasta = "'"+Hasta+"'";
	   }
             
	   conn = cf.getConnection();
       
	   String strSql = "{call beneficios.PCS_CANTIDAD_BENEFICIARIOS("+
				   ""+filtrosGenerales+","+filtrosEspecificos+", "+criterea.getCodeSede()+", "+criterea.getCodeSubprograma()+", null, " +
				   Desde+", "+Hasta+", ?)}";
       
	   CallableStatement stmt = conn.prepareCall(strSql);
	   stmt.registerOutParameter(1, OracleTypes.CURSOR);
	   stmt.execute();
       
	   ResultSet rst = (ResultSet)stmt.getObject(1);
       
	   rst.next();
              
	   return (new Integer(rst.getInt(1)));
        
   }
  
	public Long getValorTotal(List filtros, ConnectionFactory cf, RepDetBOTVO criterea) throws SQLException
	   {
		cf.closeConnection(conn);
        
		String filtrosGenerales = "'"+checkFiltros((Collection)filtros)+"'";
		String filtrosEspecificos = null;
		if(criterea.getCodigoAtrGestor() != null && criterea.getGestor() != null){
			filtrosEspecificos = "'"+checkFiltrosEspecificos((Collection)filtros)+
								 " AND NVL(Fcs_Ben_Valor_Atributo("+criterea.getCodigoAtrGestor()+", " +
								 " bot.codigo, ben.codigo, bot.FECHA_BENEFICIO),'' '') = TO_CHAR(''"+criterea.getGestor()+"'')'";
		} else {
			filtrosEspecificos = "'"+checkFiltrosEspecificos((Collection)filtros)+"'";
		}
        
		String Desde = criterea.getDesde();
		String Hasta = criterea.getHasta();
        
		if(Desde != null){
			Desde = "'"+Desde+"'";
		}
		if(Hasta != null){
			Hasta = "'"+Hasta+"'";
		}
              
		conn = cf.getConnection();
        
		String strSql = "{call beneficios.PCS_VALOR_BENEFICIOS("+
					""+filtrosGenerales+","+filtrosEspecificos+", "+criterea.getCodeSede()+", "+criterea.getCodeSubprograma()+", null, " +
					Desde+", "+Hasta+", ?)}";
        
		CallableStatement stmt = conn.prepareCall(strSql);
		stmt.registerOutParameter(1, OracleTypes.CURSOR);
		stmt.execute();
        
		ResultSet rst = (ResultSet)stmt.getObject(1);
        
		rst.next();
               
		return (new Long(rst.getLong(1)));
         
	}
  
  public Collection getAtributosEspecificos(Collection atributosEspecificos,
											Long codeSubprograma, Long codeSede,
											Long codeBOT, Long codeBen/*, Collection filtros*/) throws SQLException
  {
	Collection repAtributos = new LinkedList();
	List atr = (List)atributosEspecificos;
	RepAtributoVO atrVO = null;      
	String query = "SELECT rownum numeroAtributo, atr.NOMBRE nombreAtributo, "+
				   "nvl(fcs_ben_valor_atributo(atr.codigo, bot.codigo, "+codeBen+", bot.FECHA_BENEFICIO),' ') valor "+
				   "from tcs_ben_beneficiario ben, "+
				   "tcs_ben_subprograma sub, "+
				   "tcs_ben_beneficio_otorgado bot, "+
				   "tcs_ben_subp_atr_beneficiario atr, "+
				   "tcs_ben_sede sede "+
				   "WHERE  ben.codigo = bot.ben_codigo "+
				   "AND sub.codigo = bot.sbpr_codigo "+
				   "AND bot.FECHA_BENEFICIO <= sysdate "+
				   "AND sub.codigo = atr.sbpr_codigo "+
				   "AND sede.codigo = bot.sede_codigo "+
				   "AND sub.codigo = "+codeSubprograma+
				   " AND sede.codigo = "+codeSede+
				   " AND bot.codigo = "+codeBOT+
				   " AND ben.codigo = "+codeBen;
	if(atr.size() > 0) query +=" AND atr.codigo in (";
    
	for(int i = 0; i< atr.size(); i++)
	{
	  atrVO = (RepAtributoVO)atr.get(i);
	  query += atrVO.getCodigo().toString()+",";
	}
	if(atr.size() > 0) query +="0) ";
	/*if((Object)filtros != null)
	{
	  List lFiltros = (List)filtros;
	  CondicionConsultaVO filtro= null;
	  int cont_filtro = 0;
	  for(int i=0;i<lFiltros.size();i++)
	  {
		filtro = (CondicionConsultaVO)lFiltros.get(i);
		if(filtro.getOrigen().equals("E"))
		{
		  cont_filtro++;
		}
	  }
	  if(cont_filtro>0)
		query += " and bot.codigo in ("+checkFiltros(filtros,codeSede,codeSubprograma,codeBen)+")";
	}*/
		query +=" order by ben.codigo, numeroAtributo";
     
	//System.out.println(query);   
	ResultSet rst = cf.getRecordsRset(query,null,conn);
	RepAtributoVO atributo = null;
	while(rst.next())
	{
		checkFiltersEsp = true;
		atributo = new RepAtributoVO();
		atributo.setNumeroAtributo(rst.getInt("numeroAtributo"));
		atributo.setNombre(rst.getString("nombreAtributo"));
		atributo.setValor(rst.getString("valor"));
		repAtributos.add(atributo);
	}
	rst.close();
	if(atr.size() == 0) repAtributos = null;
	return repAtributos;
  }
  
  
  public String checkFiltros(Collection filtros)
  {
	List lFiltros = (List)filtros;
	CondicionConsultaVO filtro= null;
	String retorno="";
	if((Object)filtros != null)
	{
	  for(int i=0;i<lFiltros.size();i++)
	  {
		filtro = (CondicionConsultaVO)lFiltros.get(i);
		String operador = filtro.getCodfiltro();
		String tipoDato = filtro.getTipocampo();
        
		if(filtro.getOrigen().equals("G"))
		{
		   retorno += " and ";
		   if(tipoDato.equals("N"))
		   {
			  if(operador.equals("="))
			  {
				retorno += " ben."+filtro.getCodcampo()+" "+operador+" "+filtro.getValor();  
			  }else if(operador.equals("<>"))
			  {
				retorno += " ben."+filtro.getCodcampo()+" "+operador+" "+filtro.getValor();
			  }else if(operador.equals("<="))
			  {
				retorno += "ben."+filtro.getCodcampo()+" "+operador+" "+filtro.getValor();
			  }else if(operador.equals(">="))
			  {
				retorno += "ben."+filtro.getCodcampo()+" "+operador+" "+filtro.getValor();
			  }else if(operador.equals("<"))
			  {
				retorno += "ben."+filtro.getCodcampo()+" "+operador+" "+filtro.getValor();
			  }else if(operador.equals(">"))
			  {
				retorno += "ben."+filtro.getCodcampo()+" "+operador+" "+filtro.getValor();
			  }else
			  {
				retorno += "ben."+filtro.getCodcampo()+" "+operador+" "+filtro.getValor()+" and "+filtro.getValor2();
			  }
             
		   }else if(tipoDato.equals("A") || tipoDato.equals("L"))
		   {
			  if(operador.equals("="))
			  {
				retorno += " UPPER(ben."+filtro.getCodcampo()+" ) "+operador+" ''"+filtro.getValor().toUpperCase()+"''";  
			  }else if(operador.equals("<>"))
			  {
				retorno += " UPPER(ben."+filtro.getCodcampo()+" ) "+operador+" ''"+filtro.getValor().toUpperCase()+"''";
			  }
		   }else
		   {
			  if(operador.equals("="))
			  {
				retorno += " ben."+filtro.getCodcampo()+" "+operador+" ''"+filtro.getValor()+"''";  
			  }else if(operador.equals("<>"))
			  {
				retorno += " ben."+filtro.getCodcampo()+" "+operador+" ''"+filtro.getValor()+"''";  
			  }else if(operador.equals("<="))
			  {
				retorno += "ben."+filtro.getCodcampo()+" "+operador+" ''"+filtro.getValor()+"''";  
			  }else if(operador.equals(">="))
			  {
				retorno += "ben."+filtro.getCodcampo()+" "+operador+" ''"+filtro.getValor()+"''";  
			  }else if(operador.equals("<"))
			  {
				retorno += "ben."+filtro.getCodcampo()+" "+operador+" ''"+filtro.getValor()+"''";  
			  }else if(operador.equals(">"))
			  {
				retorno += "ben."+filtro.getCodcampo()+" "+operador+" ''"+filtro.getValor()+"''";  
			  }else
			  {
				retorno += "ben."+filtro.getCodcampo()+" "+operador+" ''"+filtro.getValor()+"'' and ''"+filtro.getValor2()+"''";
			  }
		   }
		}
	  }
	} 
	return retorno;
  }
  
	public String checkFiltrosEspecificos(Collection filtros) throws SQLException
	{
	  List lFiltros = (List)filtros;
	  CondicionConsultaVO filtro= null;
	  String retorno = "";
	  if((Object)filtros != null){
		  for(int i=0;i<lFiltros.size();i++)
		  {
			filtro = (CondicionConsultaVO)lFiltros.get(i);
			if(filtro.getOrigen().equals("E"))
			{ 
				  if(filtro.getCodfiltro().equals("="))
				 {
				   retorno += " AND NVL(Fcs_Ben_Valor_Atributo("+filtro.getCodcampo()+", bot.codigo, ben.codigo, bot.FECHA_BENEFICIO),'' '') = TO_CHAR(''"+filtro.getValor().toUpperCase()+"'') ";
				 }else if(filtro.getCodfiltro().equals("<>"))
				 {
				   retorno += " AND NVL(Fcs_Ben_Valor_Atributo("+filtro.getCodcampo()+", bot.codigo, ben.codigo, bot.FECHA_BENEFICIO),'' '') <> TO_CHAR(''"+filtro.getValor().toUpperCase()+"'') ";
				 }else if(filtro.getCodfiltro().equals("<="))
				 {
				   retorno += " AND NVL(Fcs_Ben_Valor_Atributo("+filtro.getCodcampo()+", bot.codigo, ben.codigo, bot.FECHA_BENEFICIO),'' '') <= TO_CHAR(''"+filtro.getValor()+"'') ";
				 }else if(filtro.getCodfiltro().equals(">="))
				 {
				   retorno += " AND NVL(Fcs_Ben_Valor_Atributo("+filtro.getCodcampo()+", bot.codigo, ben.codigo, bot.FECHA_BENEFICIO),'' '') >= TO_CHAR(''"+filtro.getValor()+"'') ";
				 }else if(filtro.getCodfiltro().equals("<"))
				 {
				   retorno += " AND NVL(Fcs_Ben_Valor_Atributo("+filtro.getCodcampo()+", bot.codigo, ben.codigo, bot.FECHA_BENEFICIO),'' '') < TO_CHAR(''"+filtro.getValor()+"'') ";
				 }else if(filtro.getCodfiltro().equals(">"))
				 {
				   retorno += " AND NVL(Fcs_Ben_Valor_Atributo("+filtro.getCodcampo()+", bot.codigo, ben.codigo, bot.FECHA_BENEFICIO),'' '') > TO_CHAR(''"+filtro.getValor()+"'') ";
				 }else if(filtro.getCodfiltro().equals("between"))
				 {
				   retorno += " AND NVL(Fcs_Ben_Valor_Atributo("+filtro.getCodcampo()+", bot.codigo, ben.codigo, bot.FECHA_BENEFICIO),'' '') between TO_CHAR(''"+filtro.getValor()+"'') AND TO_CHAR(''"+filtro.getValor2()+"'')";
				 }
			  }
			}
	  }
	  return retorno;
	}
  
	public RepDetBOTVO getFilters(RepDetBOTVO criterea)throws SQLException
	{
		String strQuery = null;
		ResultSet rst = null;
		conn = cf.getConnection();
        
		if(criterea.getCodeSede() != null)
		{
		  strQuery = "SELECT NOMBRE" +
					 " FROM TCS_BEN_SEDE" +
					 " WHERE CODIGO = " + criterea.getCodeSede();
		  rst = cf.getRecordsRset(strQuery,null,conn);
		  rst.next();
          
		  criterea.setNombreSede(rst.getString("NOMBRE"));
		}

		if(criterea.getCodeSubprograma() != null)
		{
		strQuery = "SELECT NOMBRE" +
				   " FROM TCS_BEN_SUBPROGRAMA" +
				   " WHERE CODIGO = " + criterea.getCodeSubprograma();
		rst = cf.getRecordsRset(strQuery,null,conn);
		rst.next();
        
		criterea.setNombreSubprograma(rst.getString("NOMBRE"));
        
		strQuery = "SELECT prog.NOMBRE NOMBRE" +
					   " FROM TCS_BEN_SUBPROGRAMA sub, TCS_BEN_PROGRAMA prog" +
					   " WHERE sub.prg_codigo = prog.CODIGO " +
					   " AND sub.CODIGO = " + criterea.getCodeSubprograma();
		rst = cf.getRecordsRset(strQuery,null,conn);
		rst.next();
        
		criterea.setNombrePrograma(rst.getString("NOMBRE"));
		}
        
		if(rst != null)
			rst.close();
        
		return criterea;
		}
  /*public String checkFiltros(Collection filtros, Long codeSede, Long codeSubpro, Long codeBen) throws SQLException
  {
	List lFiltros = (List)filtros;
	CondicionConsultaVO filtro= null;
	String retorno="";
	Vector vRetorno = new Vector();
	int Estado = 0;
	boolean noCumple = false;
	for(int i=0;i<lFiltros.size();i++)
	{
	  filtro = (CondicionConsultaVO)lFiltros.get(i);
	  if(filtro.getOrigen().equals("E"))
	  { 
		  String strSQL = "SELECT bot.codigo codigo "+
						"FROM TCS_BEN_BENEFICIARIO ben, TCS_BEN_SUBPROGRAMA sub, "+
						"TCS_BEN_BENEFICIO_OTORGADO bot, TCS_BEN_SUBP_ATR_BENEFICIARIO atr, TCS_BEN_SEDE sede "+
						"WHERE  ben.codigo = bot.ben_codigo "+
						"AND sub.codigo = bot.sbpr_codigo "+
						"AND bot.FECHA_BENEFICIO <= sysdate "+
						"AND sub.codigo = atr.sbpr_codigo "+
						"AND sede.codigo = bot.sede_codigo "+
						"AND sub.codigo = "+codeSubpro+
						" AND ben.codigo = "+codeBen+
						" AND sede.codigo = "+codeSede;
           
		   if(filtro.getCodfiltro().equals("="))
		   {
			 strSQL += " AND NVL(Fcs_Ben_Valor_Atributo(atr.codigo, bot.codigo, bot.FECHA_BENEFICIO),' ') = TO_CHAR('"+filtro.getValor()+"') "+
					   " AND atr.codigo = "+filtro.getCodcampo();
		   }else if(filtro.getCodfiltro().equals("<>"))
		   {
			 strSQL += " AND NVL(Fcs_Ben_Valor_Atributo(atr.codigo, bot.codigo, bot.FECHA_BENEFICIO),' ') <> TO_CHAR('"+filtro.getValor()+"') "+
					   " AND atr.codigo = "+filtro.getCodcampo();
		   }else if(filtro.getCodfiltro().equals("<="))
		   {
			 strSQL += " AND NVL(Fcs_Ben_Valor_Atributo(atr.codigo, bot.codigo, bot.FECHA_BENEFICIO),' ') <= TO_CHAR('"+filtro.getValor()+"') "+
					   " AND atr.codigo = "+filtro.getCodcampo();
		   }else if(filtro.getCodfiltro().equals(">="))
		   {
			 strSQL += " AND NVL(Fcs_Ben_Valor_Atributo(atr.codigo, bot.codigo, bot.FECHA_BENEFICIO),' ') >= TO_CHAR('"+filtro.getValor()+"') "+
					   " AND atr.codigo = "+filtro.getCodcampo();
		   }else if(filtro.getCodfiltro().equals("<"))
		   {
			 strSQL += " AND NVL(Fcs_Ben_Valor_Atributo(atr.codigo, bot.codigo, bot.FECHA_BENEFICIO),' ') < TO_CHAR('"+filtro.getValor()+"') "+
					   " AND atr.codigo = "+filtro.getCodcampo();
		   }else if(filtro.getCodfiltro().equals(">"))
		   {
			 strSQL += " AND NVL(Fcs_Ben_Valor_Atributo(atr.codigo, bot.codigo, bot.FECHA_BENEFICIO),' ') > TO_CHAR('"+filtro.getValor()+"') "+
					   " AND atr.codigo = "+filtro.getCodcampo();
		   }else if(filtro.getCodfiltro().equals("between"))
		   {
			 strSQL += " AND NVL(Fcs_Ben_Valor_Atributo(atr.codigo, bot.codigo, bot.FECHA_BENEFICIO),' ') between TO_CHAR('"+filtro.getValor()+"') AND TO_CHAR('"+filtro.getValor2()+"')"+
					   " AND atr.codigo = "+filtro.getCodcampo();
		   }
           
		   ResultSet rst = cf.getRecordsRset(strSQL,null,conn);  
		   if(rst.next())
		   {
			 if(!noCumple)
			 {
				vRetorno.add(rst.getString("codigo"));   
			 }
		   }else
		   {
				vRetorno.removeAllElements();
				noCumple = true;
		   }
		}
	  }
	if(vRetorno.size() > 0)
	{
	  for(int k=0;k<vRetorno.size();k++)
	  {
		retorno+=vRetorno.get(k)+",";
        
	  }
	  retorno+= "0";
	}else
	{
	  retorno+= "0";
	}
    
	return retorno;
  }*/
  
  
  /*public static void main(String[] args)
  {
	  ConnectionFactory cf = new ConnectionFactory("beneficios","beneficios");
	  RepDetBOTVO criterea  = new RepDetBOTVO();
	  criterea.setCodeSede(new Long("255"));
	  criterea.setCodeSubprograma(new Long("274"));
	  Collection atributosGenericos = new LinkedList();
	  RepAtributoVO atrVO = new RepAtributoVO();
	  atrVO.setNombre("TIPO_DOCUMENTO");
	  atrVO.setEtiqueta("TIPO DOCUMENTO");
	  atributosGenericos.add(atrVO);
	  atrVO = new RepAtributoVO();
	  atrVO.setNombre("NUMERO_DOCUMENTO");
	  atrVO.setEtiqueta("NUMERO DOCUMENTO");
	  atributosGenericos.add(atrVO);
	  atrVO = new RepAtributoVO();
	  atrVO.setNombre("PRIMER_NOMBRE");
	  atrVO.setEtiqueta("PRIMER NOMBRE");
	  atributosGenericos.add(atrVO);
	  atrVO = new RepAtributoVO();
	  atrVO.setNombre("VFL_CODIGO_BARRIO");
	  atrVO.setEtiqueta("BARRIO");
	  atributosGenericos.add(atrVO);
	  Collection atributosEspecificos = new LinkedList();
	  atrVO = new RepAtributoVO();
	  atrVO.setCodigo(new Long(1285));
	  atributosEspecificos.add(atrVO);
	  atrVO = new RepAtributoVO();
	  atrVO.setCodigo(new Long(1286));
	  atributosEspecificos.add(atrVO);
	  atrVO = new RepAtributoVO();
	  atrVO.setCodigo(new Long(1288));
	  atributosEspecificos.add(atrVO);
      
	  Collection filtros = new LinkedList();
	  CondicionConsultaVO filtro = new CondicionConsultaVO();
	  filtro.setCampo("NUMERO_DOCUMENTO");
	  filtro.setCodfiltro("=");
	  filtro.setValor("71265414");
	  filtro.setTipocampo("N");
	  filtro.setOrigen("G");
	  filtros.add(filtro);
      
	  filtro = new CondicionConsultaVO();
	  filtro.setCodcampo("SEXO");
	  filtro.setCodfiltro("=");
	  filtro.setValor("M");
	  filtro.setTipocampo("A");
	  filtro.setOrigen("G");
	  filtros.add(filtro);
      
	  //Filtro especifico
	  filtro = new CondicionConsultaVO();
	  filtro.setCodcampo("1285");
	  filtro.setCodfiltro(">");
	  filtro.setValor("15");
	  filtro.setTipocampo("N");
	  filtro.setOrigen("E");
	  filtros.add(filtro);
      
      
	  RepDetBOTDAO BOTDAO = new RepDetBOTDAO(cf);
	  try{
		List reporte = (List)BOTDAO.getReporte(criterea,atributosGenericos,atributosEspecificos, filtros);
		for(int i=0;i<reporte.size();i++)
		{
		  RepDetBOTVO bot = (RepDetBOTVO)reporte.get(i);
		  List atrGene = (List)bot.getAtributosGenerales();
		  for(int j = 0; j< atrGene.size();j++)
		  {
			RepAtributoVO atr = (RepAtributoVO)atrGene.get(j);
			//System.out.print(atr.getNumeroAtributo()+" - ");
			//System.out.print(atr.getNombre()+" - ");
		  }
		  List atrEspe = (List)bot.getAtributosEspecificos();
		  for(int j = 0; j< atrEspe.size();j++)
		  {
			RepAtributoVO atr = (RepAtributoVO)atrEspe.get(j);
			//System.out.print(atr.getNumeroAtributo()+" - ");
			//System.out.print(atr.getNombre()+" - ");
		  }
		}
		cf.closeConnection(BOTDAO.getConn());
	  }catch(SQLException e)
	  {
		e.printStackTrace();
	  }
  }*/
  
 
  
  public Connection getConn()
  {
	return conn;
  }
}